#ifndef __M_MSG_H__
#define __M_MSG_H__

#include "util.hpp"
#include "level.hpp"
#include <thread>
#include <memory>

namespace bitlog{
    struct LogMsg{//msg(信息)
        using ptr = std::shared_ptr<LogMsg>;//方便代码编写和管理内存
        //在代码中多次使用std::shared_ptr<LogMsg>时，可以用更短的ptr来代替，提高代码的可读性和编写效率
        //std::shared_ptr是一个智能指针，能够自动管理LogMsg对象的生命周期，避免内存泄漏
        size_t _line;//行号
        size_t _ctime;//时间
        std::thread::id _tid;//线程ID
        std::string _name;//日志器名称
        std::string _file;//文件名
        std::string _payload;//日志消息
        LogLevel::value _level;//日志等级

        LogMsg(std::string &name, std::string file, size_t line, std::string &&payload, 
        LogLevel::value level): _name(name), _file(file), _payload(std::move(payload)/*将 payload 转换为右值引用，以便进行移动语义的操作。*/), 
        _level(level),_line(line), _ctime(util::date::now()), _tid(std::this_thread::get_id()/*获取当前线程ID并赋值给成员变量_tid*/) {
            //std::cout << "构造msg\n";
        }
    };
}
//定义了一个用于记录和管理日志消息的结构体，包括日志的详细信息，如来源、位置、时间、线程ID、内容和等级，并使用智能指针来简化内存管理。